<?php

class FaqController extends Controller {

    /**
     * @final   pacote das views deste controller
     */
    const PACKAGE_VIEW = 'faq';

    /**
     * @var FaqService
     */
    private $faqService;

    public function __construct() {
        $this->faqService = FaqService::getInstance();
    }

    public function visualizar() {
        $IDFaq = treatUrl('id');
        multipleEntities($IDFaq);

        $Pergunta = $this->faqService->findById($IDFaq);
        if( empty($Pergunta) ) {
            redirect('ferramenta', 'listar-perguntas');
        }

        $this->save(SESSION_INTERFACE, 'Question', $Pergunta);
        $this->view('visualizar', self::PACKAGE_VIEW);
    }

    public function cadastrar() {
        $this->view('cadastrar', self::PACKAGE_VIEW);
    }

    public function inserir() {
        $ArDados = $_POST;

        $Form = Validator::inserirFaq($ArDados);
        if( !$Form->validate() ) {
            $this->saveReturn($Form->getFirstError());
        }

        if( !$this->hasReturn() ) {
            multipleEntities($ArDados);
            if( $this->faqService->save($ArDados) ) {
                $this->saveReturn('Pergunta salva com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao salvar a pergunta!');
            }
        }

        $this->showJsonResponse();
    }

    public function editar() {
        $IDPergunta = treatUrl('id');
        multipleEntities($IDPergunta);

        $Question = $this->faqService->findById($IDPergunta);

        if( empty($Question) ) {
            redirect('faq', 'listar-perguntas');
        }

        $this->save(SESSION_INTERFACE, 'Question', $Question);
        $this->view('editar', self::PACKAGE_VIEW);
    }

    public function atualizar() {
        $ArDados = $_POST;

        $Form = Validator::editarFaq($ArDados);
        if( !$Form->validate() ) {
            $this->saveReturn($Form->getFirstError());
        }

        if( !$this->hasReturn() ) {
            multipleEntities($ArDados);
            if( $this->faqService->update($ArDados) ) {
                $this->saveReturn('Pergunta salva com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao salvar a pergunta!');
            }
        }

        $this->showJsonResponse();
    }

    public function deletar() {
        $ArDados = $_POST;
        multipleEntities($ArDados);

        if( empty($ArDados['IDFaq']) ) {
            $this->saveReturn('Pergunta a ser excluída não foi recebida');
        }

        if( !$this->hasReturn() ) {
            if( $this->faqService->delete($ArDados['IDFaq']) ) {
                $this->saveReturn('Pergunta excluida com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao excluir a pergunta.');
            }
        }

        $this->showJsonResponse();
    }

    public function listarPerguntas() {
        $this->save(SESSION_INTERFACE, 'QuestionsList', $this->faqService->findAll());
        $this->view('listar_perguntas', self::PACKAGE_VIEW);
    }

}

?>
